home *** CD-ROM | disk | FTP | other *** search
- UNIT BitProcs;
- {-------------------------------------------}
- (*
- ©1988 by Steve Seaquist. All rights reserved.
- Used by permission. Use at your own risk.
- No warranty is expressed or implied.
-
- This Macintosh virus-detecting program was
- originally published and explained in the
- February 1989 issue of MacTutor magazine.
- Some aspects of its design are important to
- security, and it uses some unusual
- techniques, so please read the article.
- *)
- {-------------------------------------------}
- INTERFACE
- USES
- MacIntf;
- {$S Fingerprint}
-
- TYPE
- TPackedArrayOfChar =
- PACKED ARRAY[1..1] OF CHAR;
-
- FUNCTION BAnd
- (pLong1: LONGINT;
- pLong2: LONGINT)
- : LONGINT;
- PROCEDURE BClr
- (VAR pLong:LONGINT;
- pBitno: INTEGER);
- FUNCTION BNot
- (pLong: LONGINT)
- : LONGINT;
- FUNCTION BOr
- (pLong1: LONGINT;
- pLong2: LONGINT)
- : LONGINT;
- FUNCTION BRotL
- (pLong: LONGINT;
- pCount: INTEGER)
- : LONGINT;
- FUNCTION BRotR
- (pLong: LONGINT;
- pCount: INTEGER)
- : LONGINT;
- PROCEDURE BSet
- (VAR pLong:LONGINT;
- pBitno: INTEGER);
- FUNCTION BSL
- (pLong: LONGINT;
- pCount: INTEGER)
- : LONGINT;
- FUNCTION BSR
- (pLong: LONGINT;
- pCount: INTEGER)
- : LONGINT;
- FUNCTION BTst
- (pLong: LONGINT;
- pBitno: INTEGER)
- : BOOLEAN;
- FUNCTION BXor
- (pLong1: LONGINT;
- pLong2: LONGINT)
- : LONGINT;
- PROCEDURE FillChar
- (pTo: TPackedArrayOfChar;
- pCount: Size;
- pChar: CHAR);
- FUNCTION HiWrd
- (pLong: LONGINT)
- : INTEGER;
- FUNCTION LoWrd
- (pLong: LONGINT)
- : INTEGER;
- PROCEDURE MoveLeft
- (VAR pFrom:SignedByte;
- VAR pTo: SignedByte;
- pCount: Size);
- PROCEDURE MoveRight
- (VAR pFrom:SignedByte;
- VAR pTo: SignedByte;
- pCount: Size);
-
- {*******************************************}
- IMPLEMENTATION
- {$R-}
-
- {-------------------------------------------}
- FUNCTION BAnd
- (pLong1: LONGINT;
- pLong2: LONGINT)
- : LONGINT;
- BEGIN
- BAnd := BitAnd(pLong1,pLong2);
- END;
- {-------------------------------------------}
- PROCEDURE BClr
- (VAR pLong:LONGINT;
- pBitno: INTEGER);
- BEGIN
- ClearBit(pLong,pBitno);
- END;
- {-------------------------------------------}
- FUNCTION BNot
- (pLong: LONGINT)
- : LONGINT;
- BEGIN
- BNot := BitNot(pLong);
- END;
- {-------------------------------------------}
- FUNCTION BOr
- (pLong1: LONGINT;
- pLong2: LONGINT)
- : LONGINT;
- BEGIN
- BOr := BitOr(pLong1,pLong2);
- END;
- {-------------------------------------------}
- FUNCTION BRotL
- (pLong: LONGINT;
- pCount: INTEGER)
- : LONGINT;
- BEGIN
- BRotL := BitRotL(pLong,pCount);
- END;
- {-------------------------------------------}
- FUNCTION BRotR
- (pLong: LONGINT;
- pCount: INTEGER)
- : LONGINT;
- BEGIN
- BRotR := BitRotR(pLong,pCount);
- END;
- {-------------------------------------------}
- PROCEDURE BSet
- (VAR pLong:LONGINT;
- pBitno: INTEGER);
- BEGIN
- SetBit(pLong,pBitno);
- END;
- {-------------------------------------------}
- FUNCTION BSL
- (pLong: LONGINT;
- pCount: INTEGER)
- : LONGINT;
- BEGIN
- BSL := BitSL(pLong,pCount);
- END;
- {-------------------------------------------}
- FUNCTION BSR
- (pLong: LONGINT;
- pCount: INTEGER)
- : LONGINT;
- BEGIN
- BSR := BitSR(pLong,pCount);
- END;
- {-------------------------------------------}
- FUNCTION BTst
- (pLong: LONGINT;
- pBitno: INTEGER)
- : BOOLEAN;
- BEGIN
- BTst := BitTest(pLong,pBitno);
- END;
- {-------------------------------------------}
- FUNCTION BXor
- (pLong1: LONGINT;
- pLong2: LONGINT)
- : LONGINT;
- BEGIN
- BXor := BitXor(pLong1,pLong2);
- END;
- {-------------------------------------------}
- PROCEDURE FillChar
- (pTo: TPackedArrayOfChar;
- pCount: Size;
- pChar: CHAR);
- VAR
- i: INTEGER;
- BEGIN
- FOR i := 1 TO pCount DO
- pTo[i] := pChar;
- END;
- {-------------------------------------------}
- FUNCTION HiWrd
- (pLong: LONGINT)
- : INTEGER;
- BEGIN
- HiWrd := HiWord(pLong);
- END;
- {-------------------------------------------}
- FUNCTION LoWrd
- (pLong: LONGINT)
- : INTEGER;
- BEGIN
- LoWrd := LoWord(pLong);
- END;
- {-------------------------------------------}
- PROCEDURE MoveLeft
- (VAR pFrom:SignedByte;
- VAR pTo: SignedByte;
- pCount: Size);
- BEGIN
- BlockMove(@pFrom,@pTo,pCount);
- END;
- {-------------------------------------------}
- PROCEDURE MoveRight
- (VAR pFrom:SignedByte;
- VAR pTo: SignedByte;
- pCount: Size);
- BEGIN
- BlockMove(@pFrom,@pTo,pCount);
- END;
- {*******************************************}
- END.